/*
 * Vent_CuentasCobrar.java
 *
 * Created on 14 de agosto de 2008, 10:35 PM
 */

package administrador;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.TableModel;
import javax.swing.table.*;
import java.sql.*;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;
import java.math.*;
import java.text.*;
import java.util.Vector;


/**
 *
 * @author  daniel1
 */
public class Vent_CuentasCobrar extends javax.swing.JFrame {
Conexion conexion;
String codigoCliente;
JTable tabla;
JScrollPane js;

JTable tablaPagos;
JScrollPane jsPagos;

CreaCliente vent_cliente;
Vent_Deudas ventDeudas;
String bandera="";

//Nath Redondeo
NumberFormat nf = NumberFormat.getNumberInstance();
    
Usuario user;

    /** Creates new form Vent_CuentasCobrar */
    public Vent_CuentasCobrar(Conexion c,String codigoCliente,CreaCliente cEnt,Usuario user) {
        this.user=user;
        DecimalFormat dec=(DecimalFormat)nf;
        dec.applyPattern("###.##");
        vent_cliente=cEnt;
        conexion=c;
        this.codigoCliente=codigoCliente;
        initComponents();
        setBounds(200,100,510,630);
        setVisible(true);
        bandera="CreaCliente";
        refrescar();
    }
    
    public Vent_CuentasCobrar(Conexion c,String codigoCliente,String cod_cuenta,Vent_Deudas cEnt,Usuario user) {
        this.user=user;
        DecimalFormat dec=(DecimalFormat)nf;
        dec.applyPattern("###.##");
        ventDeudas=cEnt;
        conexion=c;
        this.codigoCliente=codigoCliente;
        initComponents();
        setBounds(200,100,510,630);
        setVisible(true);
        bandera="VentDeudas";
        refrescar();
        
        seleccionaCuenta(cod_cuenta);
    }
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jPanel1 = new javax.swing.JPanel();
        jLabel1 = new javax.swing.JLabel();
        txt_total = new javax.swing.JTextField();
        jButton1 = new javax.swing.JButton();
        jLabel2 = new javax.swing.JLabel();
        jButton2 = new javax.swing.JButton();
        jButton3 = new javax.swing.JButton();
        txt_subtotal = new javax.swing.JTextField();
        jLabel3 = new javax.swing.JLabel();
        jButton4 = new javax.swing.JButton();
        jPanel2 = new javax.swing.JPanel();
        jLabel4 = new javax.swing.JLabel();
        txt_nombre = new javax.swing.JTextField();
        txt_ci = new javax.swing.JTextField();
        jLabel5 = new javax.swing.JLabel();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);

        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Facturas x Cobrar", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, null, new java.awt.Color(102, 0, 0)));
        jPanel1.setLayout(null);

        jLabel1.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
        jLabel1.setForeground(new java.awt.Color(153, 0, 0));
        jLabel1.setText("Deuda Total x Cobrar:");
        jPanel1.add(jLabel1);
        jLabel1.setBounds(240, 540, 140, 20);

        txt_total.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
        txt_total.setForeground(new java.awt.Color(102, 0, 0));
        txt_total.setHorizontalAlignment(javax.swing.JTextField.RIGHT);
        txt_total.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                txt_totalActionPerformed(evt);
            }
        });
        jPanel1.add(txt_total);
        txt_total.setBounds(380, 540, 90, 20);

        jButton1.setText("Registrar Abono");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        jPanel1.add(jButton1);
        jButton1.setBounds(130, 520, 160, 23);

        jLabel2.setFont(new java.awt.Font("Tahoma", 1, 12)); // NOI18N
        jLabel2.setForeground(new java.awt.Color(0, 102, 102));
        jLabel2.setText("Pagos");
        jPanel1.add(jLabel2);
        jLabel2.setBounds(30, 350, 70, 15);

        jButton2.setForeground(new java.awt.Color(102, 51, 0));
        jButton2.setText("Mostrar Factura Seleccionada");
        jButton2.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton2ActionPerformed(evt);
            }
        });
        jPanel1.add(jButton2);
        jButton2.setBounds(270, 340, 200, 23);

        jButton3.setText("Todos Pagos");
        jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton3ActionPerformed(evt);
            }
        });
        jPanel1.add(jButton3);
        jButton3.setBounds(30, 520, 100, 23);
        jPanel1.add(txt_subtotal);
        txt_subtotal.setBounds(380, 510, 90, 20);

        jLabel3.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        jLabel3.setText("Pagados:");
        jPanel1.add(jLabel3);
        jLabel3.setBounds(320, 510, 60, 20);

        jButton4.setText("Modificar");
        jButton4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton4ActionPerformed(evt);
            }
        });
        jPanel1.add(jButton4);
        jButton4.setBounds(180, 340, 80, 23);

        jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
        jPanel2.setLayout(null);

        jLabel4.setFont(new java.awt.Font("Tahoma", 0, 12)); // NOI18N
        jLabel4.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        jLabel4.setText("Nombre Cuenta:");
        jPanel2.add(jLabel4);
        jLabel4.setBounds(20, 10, 100, 20);

        txt_nombre.setEditable(false);
        jPanel2.add(txt_nombre);
        txt_nombre.setBounds(120, 10, 310, 20);

        txt_ci.setEditable(false);
        jPanel2.add(txt_ci);
        txt_ci.setBounds(120, 40, 170, 20);

        jLabel5.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        jLabel5.setText("RUC/CI:");
        jPanel2.add(jLabel5);
        jLabel5.setBounds(20, 40, 100, 20);

        jPanel1.add(jPanel2);
        jPanel2.setBounds(10, 20, 460, 80);

        getContentPane().add(jPanel1, java.awt.BorderLayout.CENTER);

        pack();
    }// </editor-fold>//GEN-END:initComponents
public void refrescar(){
    //Lleno los datos del dueno de las Cuentas:    
    pongoUsuario();
    String consulta="";
    consulta="SELECT cod_cuentasCobrar as Cod,fecha,cod_factura as Factura,plazo_pago as Plazo,pagado,valor FROM cuentaspendientes c where cod_cliente like '"+codigoCliente+"' and tipo like 'xcobrar' order by fecha DESC;";
     
        //cod_usuario as Codigo,nombre as Nombre,privilegios as Privilegios
        ResultSet respuesta=null;
        respuesta=conexion.consultarBase(consulta);
          
        //Obtengo Filas-Arreglo de Titulos de Columnas
        int filas=conexion.obtenerFilas(respuesta);
        String[] titulosCol=conexion.obtenerColumnas(respuesta);
        
        //Creo la tabla:
        CrearTabla(filas,titulosCol);
        llenaTabla(respuesta,titulosCol.length,filas);
        
        //Muestro los pagos realizados:
        int cod_pag;
        int cue_cob;
        Date fecha;
        Time  hora;
        double  valor;
        String  responsable;
        
       // tb_pagos.removeAll();
        int contador=0;
        String cedula=codigoCliente.toString();
        respuesta=conexion.consultarBase("SELECT * FROM pagoscc where cod_cliente like '"+cedula+"';");
        
//        try {
//            respuesta.beforeFirst();
//            while(respuesta.next()){
//            cod_pag=respuesta.getInt("cod_pagos");
//            cue_cob=respuesta.getInt("cod_cuentasCobrar");
//            fecha=respuesta.getDate("fecha");
//            hora=respuesta.getTime("hora");
//            valor=respuesta.getDouble("valor");
//            responsable=respuesta.getString("responsable");
//            
//            tb_pagos.setValueAt(cod_pag, contador,0);
//            tb_pagos.setValueAt(cue_cob, contador,1);
//            tb_pagos.setValueAt(fecha, contador,2);
//            tb_pagos.setValueAt(hora, contador,3);
//            tb_pagos.setValueAt(responsable, contador,4);
//            tb_pagos.setValueAt(valor, contador,5);
//            
//            contador++;
//            }
//        } catch (SQLException ex) {
//            Logger.getLogger(Vent_CuentasCobrar.class.getName()).log(Level.SEVERE, null, ex);
//        }
       
        
         int filas2=conexion.obtenerFilas(respuesta);
        String[] titulosCol2=conexion.obtenerColumnas(respuesta);
        CrearTablaPagos(filas2,titulosCol2);
        llenaTablaPagos(respuesta,titulosCol2.length,filas2);
        
        //Actualizo Total:
        this.actualizoTotales();
        this.sacoSubtotalPagos();
        
        //Actualizo si es el caso la ventana del CreaCliente
        if(bandera.equals("CreaCliente")){vent_cliente.llenoDatosCliente();}
        if(bandera.equals("VentDeudas")){ventDeudas.refrescar();}
        
    }
    
    
    public void llenaTabla(ResultSet r,int columnas,int filas){
        try{
            r.beforeFirst();
            
            int j=0;
            while(r.next()) {
                
                
                for(int i=0;i<columnas;i++) {
                    
                    Object toma=r.getObject(i+1);
                    //System.out.println("toma valor:"+toma+" * fila:"+j+" * column:"+i);
                    try{
                        tabla.setValueAt(toma,j,i);
                    }catch(java.lang.ArrayStoreException e){
                        tabla.setValueAt("null",j,i);
                    }
                }
                
            j++;    
            }
        }catch(SQLException sqle){
           //System.out.println("Error al mostrar los datos");
            System.err.println(sqle);
        }
        
    }
    
public void CrearTabla(int filas,String[] titulos){
        
        int columnas=titulos.length;
        String[][] tabla0=new String[filas][columnas];
       
        tabla= new JTable(tabla0,titulos);
        
        //Aqui le especifico para que la tabla acepte valores doubles e int:
        //--------------------------------------------------------------------
        final boolean[] canEdit = new boolean [columnas];
        for(int p=0;p<columnas;p++){
        canEdit[p]=false;
        }
        tabla.setModel(new javax.swing.table.DefaultTableModel(
            tabla0,titulos  
        ) {
           // boolean[] canEdit = new boolean [] { false, false, false, false};

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        //---------------------------------------------------------------------
         //Le doy el evento del LCick del Mouse:
        tabla.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tablaMouseClicked(evt);
            }
        });
        //remuevo el JScroll para que no se monte cuando cree el nuevo:
        //*************************************************************
        try{
        jPanel1.remove(js);
        }catch(java.lang.NullPointerException e){}
        //*************************************************************
        
        //Pongo en la tabla:
            js = new JScrollPane(tabla);
                        
            js.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(198, 196, 196)));
            js.setBounds(20,122, 460, 220);
            js.setVisible(true);
            jPanel1.add(js);
            js.updateUI();
    }


public void llenaTablaPagos(ResultSet r,int columnas,int filas){
        try{
            r.beforeFirst();
            
            int j=0;
            while(r.next()) {
                
                
                for(int i=0;i<columnas;i++) {
                    
                    Object toma=r.getObject(i+1);
                    //System.out.println("toma valor:"+toma+" * fila:"+j+" * column:"+i);
                    try{
                        tablaPagos.setValueAt(toma,j,i);
                    }catch(java.lang.ArrayStoreException e){
                        tablaPagos.setValueAt("null",j,i);
                    }
                }
                
            j++;    
            }
        }catch(SQLException sqle){
            System.out.println("Error al mostrar los datos");
            System.err.println(sqle);
        }
        
    }
    
public void CrearTablaPagos(int filas,String[] titulos){
        
        int columnas=titulos.length;
        String[][] tabla0=new String[filas][columnas];
       
        tablaPagos= new JTable(tabla0,titulos);
        
        //Aqui le especifico para que la tabla acepte valores doubles e int:
        //--------------------------------------------------------------------
        final boolean[] canEdit = new boolean [columnas];
        for(int p=0;p<columnas;p++){
        canEdit[p]=false;
        }
        tablaPagos.setModel(new javax.swing.table.DefaultTableModel(
            tabla0,titulos  
        ) {
           // boolean[] canEdit = new boolean [] { false, false, false, false};

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        //---------------------------------------------------------------------
         //Le doy el evento del LCick del Mouse:
        tablaPagos.addMouseListener(new java.awt.event.MouseAdapter() {
            public void mouseClicked(java.awt.event.MouseEvent evt) {
                tablaMouseClicked(evt);
            }
        });
        //remuevo el JScroll para que no se monte cuando cree el nuevo:
        //*************************************************************
        try{
        jPanel1.remove(jsPagos);
        }catch(java.lang.NullPointerException e){}
        //*************************************************************
        
        //Pongo en la tabla:
            jsPagos = new JScrollPane(tablaPagos);
                        
            jsPagos.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(198, 196, 196)));
            jsPagos.setBounds(20, 372, 460, 130);
            jsPagos.setVisible(true);
            jPanel1.add(jsPagos);
            jsPagos.updateUI();
    }



 public void limpiar(JTable tablaL){
 int filas=tablaL.getRowCount();
 int col=tablaL.getColumnCount();
        int cont=0;
        while(cont<filas){
            try{
                for(int i=0;i<col;i++){
                    //System.out.println("valor fila:"+cont+" columnas: "+i);
                    tablaL.setValueAt(null,cont,i);
                    ////System.out.println(toma);
                }
            }catch(Exception e){};
            cont++;
        }
 }

    private void seleccionaCuenta(String cod_cuenta) {
       //System.out.println("El codigo de cuenta a seleccionar es el:"+cod_cuenta);
        //Busco la fila con este codigo de Cuenta:
        int filas=tabla.getRowCount();
        int cont=0;
        String codigo="";
        while(cont<filas){
            try{
                    codigo=tabla.getValueAt(cont,0).toString();
                   //System.out.println("Compara:"+cod_cuenta+"|"+codigo);
                    if(codigo.replaceAll(""," ").equals(cod_cuenta.replaceAll(""," "))){
                    break;
                    }
            }catch(Exception e){};
            cont++;
        }
        
         //Le selecciono y enfoco el nuevo producto:
         tabla.addRowSelectionInterval(cont,cont);
         // scroll to the editing field
         tabla.scrollRectToVisible(tabla.getCellRect(cont, 1, true));
    }
         

 private void tablaMouseClicked(java.awt.event.MouseEvent evt) {
    // Evento del click del mouse sobre la tabla:
        //Muestro los pagos realizados
        int fila=tabla.getSelectedRow();
       //System.out.println("La fila seleccionada es:"+fila);
        String codigoCta=tabla.getValueAt(fila,0).toString();
     
        int cod_pag;
        int cue_cob;
        Date fecha;
        Time  hora;
        double  valor;
        String  responsable;
        
     
       //System.out.println("Limpia la tabla");
        limpiar(tablaPagos);
        int contador=0;
        
        ResultSet respuesta=conexion.consultarBase("SELECT * FROM pagoscc p where cod_cuentasCobrar="+codigoCta+" and cod_cliente like '"+codigoCliente+"'  order by fecha DESC;");
        

        int filas2=conexion.obtenerFilas(respuesta);
        String[] titulosCol2=conexion.obtenerColumnas(respuesta);
        CrearTablaPagos(filas2,titulosCol2);
        llenaTablaPagos(respuesta,titulosCol2.length,filas2);
        
//        try {
//            respuesta.beforeFirst();
//            while(respuesta.next()){
//            cod_pag=respuesta.getInt("cod_pagos");
//            cue_cob=respuesta.getInt("cod_cuentasCobrar");
//            fecha=respuesta.getDate("fecha");
//            hora=respuesta.getTime("hora");
//            valor=respuesta.getDouble("valor");
//            responsable=respuesta.getString("responsable");
//            
//            tb_pagos.setValueAt(cod_pag, contador,0);
//            tb_pagos.setValueAt(cue_cob, contador,1);
//            tb_pagos.setValueAt(fecha, contador,2);
//            tb_pagos.setValueAt(hora, contador,3);
//            tb_pagos.setValueAt(responsable, contador,4);
//            tb_pagos.setValueAt(valor, contador,5);
//            
//            contador++;
//            }
//        } catch (SQLException ex) {
//            Logger.getLogger(Vent_CuentasCobrar.class.getName()).log(Level.SEVERE, null, ex);
//        }
        sacoSubtotalPagos();
         
 }
 
 public void sacoSubtotalPagos(){

        ////System.out.println("Entra en actualiza");
        int numeroFilas=tablaPagos.getRowCount();
        int numeroCol=tablaPagos.getColumnCount();
        int cont=0;
        double acumula=0;
        String toma;
       //System.out.println("**********Cuencta*********************");
        //Muestro Los Subtotales:
        while (cont<numeroFilas){
            
            try{
                toma=tablaPagos.getValueAt(cont, numeroCol-1).toString();
               //System.out.println("Acumula="+acumula);
                acumula=acumula+Double.parseDouble(toma);
                
                
            } catch(java.lang.NullPointerException e){
            System.err.println("error je"+e);
            };
           //System.out.println("Acumula="+acumula);
            
            cont++;
        }
       //System.out.println("*******************************");
        acumula=Math.round(acumula*100);
        acumula=acumula/100;
        txt_subtotal.setText(String.valueOf(acumula));
        
    }
 
 
 public void actualizoTotales(){
        ////System.out.println("Entra en actualiza");
        int filas=tabla.getRowCount();
        int columnas=tabla.getColumnCount();
        int cont=0;
        double acumula=0;
        String toma;
        
        //Muestro Los Subtotales:
        while (cont<filas){
            
            try{
                toma=tabla.getValueAt(cont, columnas-1).toString();
                acumula=acumula+Double.parseDouble(toma);
            } catch(Exception e){System.out.println(e);};
            cont++;
        }
        String deudasS=String.valueOf(nf.format(acumula).replaceAll(",","."));
        this.txt_total.setText(deudasS);
        
    }
 
    public void pongoUsuario(){
    ResultSet respuesta=conexion.consultarBase("SELECT * FROM cliente c where cod_cliente like '"+codigoCliente+"';");
        try {
            respuesta.next();
            String nombre=respuesta.getString("nombre");
            String apellido=respuesta.getString("apellido");
            String completo=nombre+" "+apellido;
            txt_nombre.setText(completo);
            txt_ci.setText(codigoCliente);
        } catch (SQLException ex) {
            Logger.getLogger(Vent_CuentasCobrar.class.getName()).log(Level.SEVERE, null, ex);
        }
    
    
    
    
    
    }
 
 
private void txt_totalActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_txt_totalActionPerformed
// TODO add your handling code here:
}//GEN-LAST:event_txt_totalActionPerformed

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
// TODO add your handling code here:
  
    Vent_RegAbonos vr= new Vent_RegAbonos(conexion,codigoCliente,this,user);
}//GEN-LAST:event_jButton1ActionPerformed

private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
// TODO add your handling code here:
    try{
        
     int fila=tabla.getSelectedRow();
     if(fila>=0){
     
     String codigofact=tabla.getValueAt(fila,2).toString();
     int tamano=codigofact.length();
     String letra=codigofact.substring(0,1);
     String codigof=codigofact.substring(1,tamano);
     
    //System.out.println("Click en la Fila :"+fila+codigofact);
     visorFactura vf=new visorFactura(conexion,codigof,letra);
     }else{
     JOptionPane.showMessageDialog(this,"No se ha seleccionado ninguna fila","Informacion",JOptionPane.INFORMATION_MESSAGE);
     }
    }catch(Exception e){
     
    }
    
}//GEN-LAST:event_jButton2ActionPerformed

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton3ActionPerformed
// TODO add your handling code here:
    this.refrescar();
}//GEN-LAST:event_jButton3ActionPerformed

private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton4ActionPerformed
// TODO add your handling code here:
    int seleccion=tabla.getSelectedRow();
    if(seleccion>=0){
    int codigoCuenta=Integer.parseInt(tabla.getValueAt(seleccion,0).toString());
    Vent_ModDeudaArreglado vmd=new Vent_ModDeudaArreglado(conexion,codigoCliente,codigoCuenta,this,user);
    
    
    }
}//GEN-LAST:event_jButton4ActionPerformed

    /**
    * @param args the command line arguments
    */
    

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton2;
    private javax.swing.JButton jButton3;
    private javax.swing.JButton jButton4;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JPanel jPanel2;
    public javax.swing.JTextField txt_ci;
    public javax.swing.JTextField txt_nombre;
    private javax.swing.JTextField txt_subtotal;
    private javax.swing.JTextField txt_total;
    // End of variables declaration//GEN-END:variables

}
